#ifndef _OPERACION_CONSULTA_H_
#define _OPERACION_CONSULTA_H_

/**********************************************************************	
* OperacionConsulta.h
* 
* Descripcion:
* 		Esta clase define la operacion del tipo Consulta
**********************************************************************/

#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <string>
#include "operacion.h"
#include "debugger.h"
#include "logger.h"
#include "tipo_dato.h"
#include "tipo_string.h"
#include "tipo_int.h"
#include "parser.h"
#include "paresDatos.h"
#include "archivo.h"

class OperacionConsulta : public Operacion{
	
	private:
		std::string	nombre_archivo;
		std::vector <ParesDatos*> campos; 
		
		std::string datos;
		
		static std::string NOMBRE_PARAM_CONSULTA;
		
		OperacionConsulta(std::string &archivo);
		
		static void procesar_campos(std::string cadena,std::vector<ParesDatos*>& campos, TipoStruct* reg_base)
					throw(ExcepSintaxisParser);
		/*
		 * funcion encargada de devolver en un string todos los datos ingresados
		 * para la consulta de la forma (valor, campo).
		 */
		std::string imprimir_resultado(std::vector<TipoStruct*> &resultado);
		
		bool chequear_congruencia_datos(Archivo& arch);
		
		void limpiar_resultado(std::vector<TipoStruct*> &resultado);
		
	public:
	
		static Operacion * construir(std::string param)	throw (ExcepSintaxisParser);
		
		~OperacionConsulta();
		
		void ejecutar(Modelo *modelo);	 
		
};

#endif



